package s.f.util;

import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import s.f.contribuyentes.*;

/**
 * El EJBGetter lo utilizaremos como clase auxiliar para obtener las referencias
 * a las interfaces remotas de los EJB's.
 */
public class EJBGetter {

    private static Properties envProperties = null;
    static final String initialContextFactory = "org.jnp.interfaces.NamingContextFactory";//nuestro namingfactory para JNP
    static final String providerURL = "localhost:1099";//dirección de nuestro proveedor RMI;
    static final String urlPkgPrefixes = "org.jboss.naming";//prefix de nombrado en JBoss

    static {
        envProperties = new Properties();
        initEnv();
    }

    private static void initEnv() {
        envProperties.put(javax.naming.InitialContext.INITIAL_CONTEXT_FACTORY, initialContextFactory);
        envProperties.put(javax.naming.InitialContext.PROVIDER_URL, providerURL);
        envProperties.put(javax.naming.Context.URL_PKG_PREFIXES, urlPkgPrefixes);
    }

    /**
     * Obtener la referencia a la interfaz remota del bean
     * EmpleadosContribuyentesController.
     */
    public static EmpleadosContribuyentesControllerRemote getEmpleadosContribuyentesControllerRemote() throws RemoteException, RemoteAppException {
        try {
            InitialContext jndiContext = new InitialContext(envProperties);//inicializando ambiente donde buscaremos las referencias a los EJB
            Object ref = jndiContext.lookup("EmpleadosContribuyentesController");//Nombre JNDI
            //narrow convierte el objeto de tipo Object a tipo objeto SfempleadosEmpleadosControllerHome
            EmpleadosContribuyentesControllerRemote usrR = ((EmpleadosContribuyentesControllerHome) PortableRemoteObject.narrow(ref, EmpleadosContribuyentesControllerHome.class)).create();
            return usrR;
        } catch (CreateException e) {
            throw new RemoteAppException("Error al obtener la referencia al bean EmpleadoContribuyente", e);
        } catch (NamingException e) {
            throw new RemoteAppException("Error al obtener el EJB de sesión EmpleadosContribuyentesControllerRemote", e);
        }
    }
}
